package com.pajk.user.dal.index;

import java.io.Serializable;

/**
 * @author Haomin Liu
 */
public interface Index<KeyType, ValueType> {

    /**
     * 在索引中按照key值查询
     *
     * @param key 要查询的值
     * @return 找不到返回null，否则返回value值
     */
    public ValueType get(KeyType key);

    /**
     * 添加、更改索引
     *
     * 设计约定：此方法需要保证最终一致性
     *
     * @param key
     * @param val
     */
    public void put(KeyType key, ValueType val);

    /**
     * 删除索引
     *
     * 设计预定：此方法需要保证最终一致性
     *
     *
     * @param key
     * @return
     */
    public void remove(KeyType key);

    /**
     * 删除索引
     *
     * 此方法针对索引是的Value是Collection类型的情况，subKey用于指定具体要从value collections中要删除的项
     *
     * 设计预定：此方法需要保证最终一致性
     *
     *
     * @param key
     * @return
     */
    public void remove(KeyType key, Object subKey);

}
